草庐IT

C++ 变暖标准 vector

全部标签

c++ - 没有 "predicate"的对 vector 上的 max_element

我想找到pairs的vector的最大元素。我的标准是:最大元素是一对中第二个值最高的元素。我这样做了:automax_angle=std::max_element(begin(angles),end(angles),[](conststd::pair&left,conststd::pair&right){returnleft.second不写谓词是否可以做到?由于它是标准结构,是否有更简单的配对方法? 最佳答案 不,你不能,因为默认情况下std::pair是按字典顺序比较的,这意味着从左到右逐元素。因此,您的解决方案是您可以拥有的

不包括 C++ 标准库头文件的 Python setuptools

我正在尝试将Python包装器编译为我编写的小型C++库。我编写了以下setup.py脚本来尝试使用setuptools来编译包装器:fromsetuptoolsimportsetup,Extensionimportnumpyasnpimportosatmcmodule=Extension('atmc',include_dirs=[np.get_include(),'/usr/local/include'],libraries=['mcopt','c++'],#myC++libraryisat./build/libmcopt.alibrary_dirs=[os.path.abspath

c++ - 如何从一个 vector 计算坐标系?

如何只给定一个vector来创建坐标系?(左手、右手、本地或不同空间)我正在寻找只给定一个vector的局部坐标系统算法:原因:1)Z可能是表面法线,那么X和Yvector就是切线和副切线vector2)另一个原因是光线追踪:对光源进行采样。给定一个交点,从该点构建局部坐标系,然后追踪光线到光的形状。Vector3Z={0.0f,0.0f,1.0f};//given//fillxandyCreateXHandedCoordinateSystem(Vector3*X,Vector3*Y,constVector3&Z){//implementationgoeshere..//evaluat

c++ - 非标准 gnu 案例范围的标准替代方案

我有一个快速解决方法的问题,以享受非标准gnu的好处caseranges.例如,非标准:case1...5:可以替换为:case1:case2:case3:case4:case5:可能一些宏解决方案可能是有序的。根据我的内存,宏循环无法循环进行大量迭代。出于这个原因,如果范围“很大”,比如以千为单位怎么办? 最佳答案 如果您在谈论预处理器循环,我猜您正在考虑来自boost的预处理器元编程。虽然它可能非常便携,但循环似乎仅限于255“迭代”。事实上,实现并不是一个真正的循环,它更像是一个硬编码的循环展开(因此是限制)。您当然可以将其扩

c++ - 如何从 std::vector 的末尾删除几个元素?

假设我有一个std::vector整数:std::vectorv;v包含100个元素,我想删除最后10个元素。我可以想到这个解决方案:v.erase(v.end()-10,v.end());还有更好的吗? 最佳答案 你可以试试这个:v.resize(v.size()-10);但是,您需要根据您的方法对其进行基准测试。我不确定它更好,甚至可能完全相同。您也可以在调整大小之前检查大小:if(v.size()>=10){v.resize(v.size()-10);}编辑:Resize删除vector末尾的元素:http://www.cpl

c++ - 来自 Boost.Spirit 语法的属性:来自 std:vector of boost::variant 的错误

我有一个用于读取棋盘游戏位置描述的工作解析器(国际跳棋,officialgrammar):#include#includenamespacex3=boost::spirit::x3;autoconstcolon=x3::lit(':');autoconstcomma=x3::lit(',');autoconstdash=x3::lit('-');autoconstdot=x3::lit('.');autoconstking=x3::char_('K');autoconstcolor=x3::char_("BW");autoconstnum_sq=x3::int_;autoconstnu

c++ - 是否可以使用填充构造函数创建 std::vector<std::unique_ptr<Bar>> ?

我有一个Foo类,其成员变量类型为std::vector>,我想填写这个类的构造函数的初始化列表。这可能吗?我希望可以使用vector的填充构造函数,就像这样Foo::Foo(intn):vector>(n,unique_ptr(newBar)){}但我认为这需要std::unique_ptr的复制构造函数,它被删除了(因为它应该被删除)(unique_ptr(constunique_ptr&)=delete)。有没有更好的方法来解决这个问题? 最佳答案 既然不可复制,那就搬吧!硬编码对象的解决方案:#include#include

c++ - 是否有像 PSR-1/2 这样的 C++ 编码标准

我正在寻找C++编码标准。我发现了很多标准:谷歌C++风格指南高完整性C++编码标准4.0版...是否有每个C++开发人员都遵循的C++编码标准,如PSR-1/21?1)PHP标准推荐。PSR-1:基本编码标准。PSR-2:编码风格指南。 最佳答案 IsthereanyC++codingstandardlikePSR-1/2thateveryC++developerfollows?C++语言标准由ISOC++Committee正式制定.该标准带有(大部分)向后兼容的迭代和版本控制(如c++-11、c++-14、c++-17)。这实际

c++ - 使用 C++ 访问 OS X 上的标准目录

从C++访问OSX上标准目录的现代、标准、规范方法是什么,例如~/Library/ApplicationSupport或~/Library/Preferences?我看到提到使用CoreServices,但它也提到它已被弃用,我很难找到可以让我做更多事情的文档,而不仅仅是将代码粘贴进去。我找到了使用ObjectiveC++的提及,但是关于该选项的大部分信息都围绕着从ObjectiveC调用C++代码,而且Apple关于它的文档似乎相当稀疏​​,或者至少我没有成功找到它. 最佳答案 好吧,有一个鲜为人知的NSSystemDirecto

c++ - 删除结束迭代器是对标准的疏忽还是设计决策?

标准库容器允许我们删除由迭代器first和last表示的范围。std::vectorbar;//firstitlastitbar.erase(bar.begin(),bar.end());标准规定first迭代器必须有效并且可解引用,而last只需要有效。但是,如果first==last则first不需要取消引用,因为erase是空操作。这意味着以下内容是合法的:bar.erase(bar.end(),bar.end());但是,如果我只想删除一个元素而不是一个范围,则迭代器必须是有效的并且可解引用,从而导致以下未定义的行为:bar.erase(bar.end());为什么这不只是空操